package com.leetcode.tree.recursion;

import com.leetcode.basic.TreeNode;

/**
 * @author Dennis Li
 * @date 2020/6/15 16:03
 */
public class IsBalanced_110 {

    /**
     * 1.当需要进行递归的值与结果值不同时，可以考虑通过一个成员变量作为结果
     * 2.建立一个额外的方法来实现递归，主方法用于返回结果
     */

    // 难点：没有考虑可以通过一个成员变量来作为结果
    private boolean result = true;

    public boolean isBalanced(TreeNode root) {
        maxDepth(root);
        return result;
    }

    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        // 形成有效递归
        int l = maxDepth(root.left);
        int r = maxDepth(root.right);
        // 存在不合理则将最后的结果置为false，否则继续完成递归
        if (Math.abs(l - r) > 1) result = false;
        return 1 + Math.max(l, r);
    }
}
